/**
 * 商品详情页公共工具函数
 */

/**
 * 移除HTML标签，将HTML格式的文本转换为纯文本
 * @param {string} html - 可能包含HTML标签的字符串
 * @returns {string} 纯文本字符串
 */
export const stripHtmlTags = (html) => {
  if (!html || typeof html !== 'string') return '';
  
  return html
    .replace(/<[^>]+>/g, '')  // 移除所有HTML标签
    .replace(/&nbsp;/g, ' ')  // 替换&nbsp;为空格
    .replace(/&lt;/g, '<')    // 替换&lt;
    .replace(/&gt;/g, '>')    // 替换&gt;
    .replace(/&amp;/g, '&')   // 替换&amp;
    .replace(/&quot;/g, '"')  // 替换&quot;
    .replace(/&#39;/g, "'")   // 替换&#39;
    .replace(/\s+/g, ' ')     // 多个空格替换为单个空格
    .trim();                  // 去除首尾空格
};

// 获取规格的唯一标识
export const getSpecKey = (spec) => spec.id || spec.name;

// 获取选项的唯一标识
export const getOptionKey = (option) => option.id || option.code || option.name;

// 安全的数字转换
export const safeParseFloat = (value, defaultValue = 0) => {
  const num = parseFloat(value);
  return isNaN(num) ? defaultValue : num;
};

// 查找规格组
export const findSpec = (specs, specKey) => {
  return specs.find(s => getSpecKey(s) === specKey);
};

// 查找规格选项
export const findOption = (spec, optionKey) => {
  if (!spec || !spec.options) return null;
  return spec.options.find(opt => getOptionKey(opt) === optionKey);
};

// 构建规格文本（用于显示）
export const buildSpecsText = (specs, selectedSpecs) => {
  return specs
    .map(spec => {
      const option = findOption(spec, selectedSpecs[getSpecKey(spec)]);
      return option?.name;
    })
    .filter(Boolean)
    .join('/');
};

// 验证必选项
export const validateRequiredSpecs = (specs, selectedSpecs) => {
  return specs.some(spec => {
    return spec.mandatory === 1 && !selectedSpecs[getSpecKey(spec)];
  });
};

// 解析价格字段
export const parsePrice = (apiData) => {
  let basePrice = 0;
  // ✅ 优先级1: salePrice（后端自定义售价，系统可修改）
  if (apiData.salePrice != null && apiData.salePrice > 0) {
    basePrice = apiData.salePrice;
  } 
  // ✅ 优先级2: priceHead（建议销售价）
  else if (apiData.priceHead != null && apiData.priceHead > 0) {
    basePrice = apiData.priceHead;
  } 
  // ✅ 优先级3: price（原价，第三方价格）
  else if (apiData.price != null && apiData.price > 0) {
    basePrice = apiData.price;
  } 
  // ✅ 兼容其他字段名
  else if (apiData.product_price != null && apiData.product_price > 0) {
    basePrice = apiData.product_price;
  } else if (apiData.firstSku?.salePrice != null && apiData.firstSku.salePrice > 0) {
    basePrice = apiData.firstSku.salePrice; // 库迪特有
  } else if (apiData.lowestPrice != null && apiData.lowestPrice > 0) {
    basePrice = apiData.lowestPrice / 100; // 库迪：单位是分
  }
  return safeParseFloat(basePrice);
};

/**
 * 解析商品原价（第三方价格）
 * @param {Object} apiData API返回的商品数据
 * @returns {Number} 解析后的原价
 */
export const parseOriginalPrice = (apiData) => {
  let originalPrice = 0;
  if (apiData.originalPrice != null && apiData.originalPrice > 0) {
    // 优先使用originalPrice字段（第三方原价）
    originalPrice = apiData.originalPrice;
  } else if (apiData.product_price != null && apiData.product_price > 0) {
    originalPrice = apiData.product_price;
  } else if (apiData.firstSku?.standardPrice != null && apiData.firstSku.standardPrice > 0) {
    originalPrice = apiData.firstSku.standardPrice;
  } else {
    // 如果没有原价，使用售价
    originalPrice = parsePrice(apiData);
  }
  return safeParseFloat(originalPrice);
};

/**
 * 构建完整的规格对象（用于购物车和订单提交）
 * 将简单的 key-value 转换为包含完整信息的对象
 * @param {Array} specs - 商品的规格列表
 * @param {Object} selectedSpecs - 用户选择的规格 {specKey: optionKey}
 * @returns {Object} 完整的规格对象 {specKey: {id, linkId, name, code, specId, specName, price}}
 */
export const buildFullSelectedSpecs = (specs, selectedSpecs) => {
  const fullSelectedSpecs = {};
  
  specs.forEach(spec => {
    const specKey = getSpecKey(spec);
    const selectedOptionKey = selectedSpecs[specKey];
    
    if (selectedOptionKey) {
      const option = findOption(spec, selectedOptionKey);
      if (option) {
        fullSelectedSpecs[specKey] = {
          id: option.id || option.code || selectedOptionKey,
          linkId: option.linkId || String(spec.id) || '',  // ✅ 优先使用option.linkId，否则使用规格组的id
          name: option.name || selectedOptionKey,
          code: option.code || '',
          specId: spec.id,  // ✅ 保存规格组的id
          specName: spec.name,  // ✅ 保存规格组的名称（用于排序）
          price: option.price || 0  // ✅ 保存规格选项的额外价格（用于订单计算）
        };
      }
    }
  });
  
  return fullSelectedSpecs;
};

